#!/bin/bash
# 设置彩票定时任务的cron作业

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
SCHEDULER_SCRIPT="$SCRIPT_DIR/lottery_scheduler.py"
VENV_PATH="$SCRIPT_DIR/venv"

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

# 生成cron作业内容
generate_cron_jobs() {
    cat << EOF
# 彩票定时任务 - 自动生成于 $(date)
# 路径: $PROJECT_DIR

# 福彩3D：每日21:22获取开奖结果，每日22:10更新各奖项中奖情况
22 21 * * * cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery fc3d --action fetch
10 22 * * * cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery fc3d --action update

# 双色球：周二、周四、周日的21:22获取开奖结果，22:10更新各奖项中奖情况
22 21 * * 2,4,0 cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery ssq --action fetch
10 22 * * 2,4,0 cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery ssq --action update

# 快乐8：每日21:40获取开奖结果，每日22:10更新各奖项中奖情况
40 21 * * * cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery kl8 --action fetch
10 22 * * * cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery kl8 --action update

# 七乐彩：周一、周三、周五的21:22获取开奖结果，22:10更新各奖项中奖情况
22 21 * * 1,3,5 cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery qlc --action fetch
10 22 * * 1,3,5 cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery qlc --action update

# 大乐透：周一、周三、周六的21:40获取开奖结果，22:10更新各奖项中奖情况
40 21 * * 1,3,6 cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery dlt --action fetch
10 22 * * 1,3,6 cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery dlt --action update

# 排列3：每日21:40获取开奖结果，每日22:10更新各奖项中奖情况
40 21 * * * cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery pl3 --action fetch
10 22 * * * cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery pl3 --action update

# 排列5：每日21:40获取开奖结果，每日22:10更新各奖项中奖情况
40 21 * * * cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery pl5 --action fetch
10 22 * * * cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery pl5 --action update

# 七星彩：周二、周五、周日的21:40获取开奖结果，22:10更新各奖项中奖情况
40 21 * * 2,5,0 cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery qxc --action fetch
10 22 * * 2,5,0 cd $PROJECT_DIR && $VENV_PATH/bin/python $SCHEDULER_SCRIPT --mode manual --lottery qxc --action update

EOF
}

# 安装cron作业
install_cron() {
    log_info "安装彩票定时任务到crontab..."
    
    # 检查虚拟环境
    if [ ! -d "$VENV_PATH" ]; then
        log_warning "虚拟环境不存在: $VENV_PATH"
        log_info "请先创建虚拟环境"
        exit 1
    fi
    
    # 备份当前crontab
    BACKUP_FILE="/tmp/crontab_backup_$(date +%Y%m%d_%H%M%S).txt"
    crontab -l > "$BACKUP_FILE" 2>/dev/null || true
    log_info "当前crontab已备份到: $BACKUP_FILE"
    
    # 创建临时文件
    TEMP_CRON="/tmp/lottery_cron_$(date +%Y%m%d_%H%M%S).txt"
    
    # 保留现有crontab内容（除了彩票相关的）
    if crontab -l 2>/dev/null | grep -v "彩票定时任务" | grep -v "lottery_scheduler.py" > "$TEMP_CRON"; then
        log_info "保留现有cron作业"
    else
        touch "$TEMP_CRON"
        log_info "创建新的crontab"
    fi
    
    # 添加彩票定时任务
    echo "" >> "$TEMP_CRON"
    generate_cron_jobs >> "$TEMP_CRON"
    
    # 安装新的crontab
    crontab "$TEMP_CRON"
    
    # 清理临时文件
    rm -f "$TEMP_CRON"
    
    log_success "彩票定时任务安装完成！"
    
    echo
    log_info "当前crontab内容:"
    crontab -l
}

# 卸载cron作业
uninstall_cron() {
    log_info "卸载彩票定时任务..."
    
    # 备份当前crontab
    BACKUP_FILE="/tmp/crontab_backup_$(date +%Y%m%d_%H%M%S).txt"
    crontab -l > "$BACKUP_FILE" 2>/dev/null || true
    log_info "当前crontab已备份到: $BACKUP_FILE"
    
    # 创建临时文件，移除彩票相关任务
    TEMP_CRON="/tmp/lottery_cron_remove_$(date +%Y%m%d_%H%M%S).txt"
    
    if crontab -l 2>/dev/null | grep -v "彩票定时任务" | grep -v "lottery_scheduler.py" > "$TEMP_CRON"; then
        # 安装清理后的crontab
        crontab "$TEMP_CRON"
        log_success "彩票定时任务已卸载"
    else
        # 如果没有其他任务，清空crontab
        crontab -r 2>/dev/null || true
        log_success "crontab已清空"
    fi
    
    # 清理临时文件
    rm -f "$TEMP_CRON"
}

# 显示帮助
show_help() {
    cat << EOF
彩票定时任务cron设置脚本

用法: $0 <命令>

命令:
  install     安装彩票定时任务到crontab
  uninstall   从crontab卸载彩票定时任务
  show        显示将要安装的cron作业内容
  status      显示当前crontab状态

示例:
  $0 install    # 安装定时任务
  $0 show       # 查看任务内容
  $0 status     # 查看当前状态
  $0 uninstall  # 卸载定时任务

注意：
- 此脚本会修改当前用户的crontab
- 安装前会自动备份当前crontab
- 确保已安装Python虚拟环境和相关依赖

EOF
}

# 显示cron作业内容
show_cron() {
    log_info "彩票定时任务cron作业内容:"
    echo
    generate_cron_jobs
}

# 显示状态
show_status() {
    log_info "当前crontab状态:"
    echo
    
    if crontab -l 2>/dev/null; then
        echo
        log_info "彩票相关任务:"
        if crontab -l 2>/dev/null | grep -E "(彩票|lottery_scheduler)" --color=never; then
            echo
        else
            log_warning "未找到彩票相关任务"
        fi
    else
        log_warning "当前用户没有crontab"
    fi
}

# 主程序
case "${1:-}" in
    install)
        install_cron
        ;;
    uninstall)
        uninstall_cron
        ;;
    show)
        show_cron
        ;;
    status)
        show_status
        ;;
    help|--help|-h)
        show_help
        ;;
    *)
        echo "用法: $0 {install|uninstall|show|status|help}"
        echo "使用 '$0 help' 查看详细帮助"
        exit 1
        ;;
esac
